import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { viteMockServe } from 'vite-plugin-mock'

// 自动导入vue函数
import AutoImport from 'unplugin-auto-import/vite'
const pathSrc = path.resolve(__dirname, 'src')

// 引入svg需要用到的方法
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'

// 引入Unocss
import Unocss from 'unocss/vite'
import { presetUno, presetAttributify, presetIcons } from 'unocss'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  //获取各种环境下的对应的变量
  let env = loadEnv(mode, process.cwd())
  return {
    build: {
      outDir: 'admin-dist',
    },
    plugins: [
      vue(),
      Unocss({
        // 使用Unocss
        presets: [presetUno(), presetAttributify(), presetIcons()],
      }),
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        symbolId: 'icon-[dir]-[name]',
      }),
      viteMockServe({
        mockPath: 'mock',
        localEnabled: command === 'serve',
      }),
      AutoImport({
        // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
        imports: ['vue'],
        eslintrc: {
          enabled: true, // 是否自动生成 eslint 规则，建议生成之后设置 false
          filepath: './.eslintrc-auto-import.json', // 指定自动导入函数 eslint 规则的文件
        },
        dts: path.resolve(pathSrc, 'types', 'auto-imports.d.ts'), // 指定自动导入函数TS类型声明文件路径
      }),
    ],
    resolve: {
      alias: {
        '@': path.resolve('./src'), // 相对路径别名配置，使用 @ 代替 src
      },
    },
    // scss全局变量的配置
    css: {
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: '@import "./src/styles/variable.scss";',
        },
      },
    },
    //代理跨域
    server: {
      port: 6060, // 端口号
      proxy: {
        // '/api/file': {
        //   target: 'http://127.0.0.1:7001',
        //   changeOrigin: true,
        //   bypass(req, res, options: any) {
        //     const proxyURL = options.target + options.rewrite(req.url);
        //     console.log('proxyURL', proxyURL);
        //     req.headers['x-req-proxyURL'] = proxyURL;
        //     res.setHeader('x-req-proxyURL', proxyURL); // 设置响应头可以看到
        //   },
        //   rewrite: (path) => path.replace(/^\/api/, ''),
        // },
        [env.VITE_APP_BASE_API]: {
          //获取数据的服务器地址设置
          target: env.VITE_SERVE,
          //需要代理跨域
          changeOrigin: true,
          bypass(req, res, options: any) {
            const proxyURL = options.target + options.rewrite(req.url)
            req.headers['x-req-proxyURL'] = proxyURL
            res.setHeader('x-req-proxyURL', proxyURL) // 设置响应头可以看到
          },
          //路径重写
          rewrite: (path) => path.replace(/^\/api/, ''),
        },
      },
    },
  }
})
